/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CirculoMohr;

/**
 *
 * @author Fabricio
 */
public class CirculoDeMohr {
    
    private double inerciaMinima;
    private double inerciaMedia;
    private double inerciaMaxima;
    private double raio;
    private double angulo;
    private double iXLinha;
    private double iYLinha;
    private double pXYLinha;
    private double anguloEixo;
    private final double teta;

    /**
     * Obtem o angulo em radianos
     * @return
     */
    public double getAngulo() {
        return angulo;
    }

    /**
     * Obtem o angulo em graus
     * @return
     */
    public double getAnguloGraus() {
        return angulo * 360 / (2 * Math.PI);
    }

    public double getInerciaMedia() {
        return inerciaMedia;
    }

    public double getInerciaMinima() {
        return inerciaMinima;
    }

    public double getInerciaMaxima() {
        return inerciaMaxima;
    }

    /**
     * Obtem o tamanho do raio
     * @return
     */
    public double getRaio() {
        return raio;
    }

    public double getAnguloEixo() {
        return anguloEixo;
    }

    public double getAnguloEixoGraus() {
        return anguloEixo * 360 / (2 * Math.PI);
    }

    public double getiXLinha() {
        return iXLinha;
    }

    public double getiYLinha() {
        return iYLinha;
    }

    public double getpXYLinha() {
        return pXYLinha;
    }

    public double getTeta() {
        return teta;
    }


    public double getTetaGraus() {
        return teta * 360 / (2 * Math.PI);
    }


    /**
     *
     * @param iX inercia X
     * @param iY inercia Y
     * @param pXY produto de inercia
     * @param angulo em graus
     */
    public CirculoDeMohr(double iX, double iY, double pXY, double angulo){

        //Calcula o Raio do Cirulo de Mohr
        this.raio = Math.sqrt(Math.pow((iX - iY) / 2 , 2) + Math.pow(pXY,2));

        //Calcula as Inercias
        this.inerciaMedia = (iX + iY) / 2;
        this.inerciaMinima = this.inerciaMedia - raio;
        this.inerciaMaxima = this.inerciaMedia + raio;

        //Converte o Angulo Para radianos
        this.angulo = 2*Math.PI*angulo/360;

        //Calcula o angulo do eixo
        this.anguloEixo = Math.atan(-2*pXY/(iX-iY));

        //Angulo teta
        this.teta = 2*this.getAngulo()-this.getAnguloEixo();

        //Calcula os momentos e o produto com base no angulo teta
        this.iXLinha = this.inerciaMedia + this.raio*Math.cos(teta);
        this.iYLinha = this.inerciaMedia - this.raio*Math.cos(teta);
        this.pXYLinha = this.raio*Math.sin(teta);
    }

}
